﻿namespace Pacman
{
    using System;
    using System.Collections.Generic;
    using System.Text;

    public class Maze
    {
        private string[,] matrix = 
        {
        { "┌", "─", "─", "─", "─", "─", "─", "─", "─", "─", "─", "─", "─", "─", "─", "─", "─", "─", "─", "─", "─", "─", "─", "─", "─", "─", "─", "┐" }, 
        { "│", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", "│", "│", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", "│" }, 
        { "│", " ", "┌", "─", "─", "┐", " ", "┌", "─", "─", "─", "┐", " ", "│", "│", " ", "┌", "─", "─", "─", "┐", " ", "┌", "─", "─", "┐", " ", "│" },
        { "│", " ", "│", "#", "#", "│", " ", "│", "#", "#", "#", "│", " ", "│", "│", " ", "│", "#", "#", "#", "│", " ", "│", "#", "#", "│", " ", "│" }, 
        { "│", " ", "└", "─", "─", "┘", " ", "└", "─", "─", "─", "┘", " ", "└", "┘", " ", "└", "─", "─", "─", "┘", " ", "└", "─", "─", "┘", " ", "│" },
        { "│", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", "│" },
        { "│", " ", "┌", "─", "─", "┐", " ", "┌", "┐", " ", "┌", "─", "─", "─", "─", "─", "─", "┐", " ", "┌", "┐", " ", "┌", "─", "─", "┐", " ", "│" },
        { "│", " ", "└", "─", "─", "┘", " ", "│", "│", " ", "└", "─", "─", "┐", "┌", "─", "─", "┘", " ", "│", "│", " ", "└", "─", "─", "┘", " ", "│" }, 
        { "│", " ", " ", " ", " ", " ", " ", "│", "│", " ", " ", " ", " ", "│", "│", " ", " ", " ", " ", "│", "│", " ", " ", " ", " ", " ", " ", "│" }, 
        { "└", "─", "─", "─", "─", "┐", " ", "│", "└", "─", "─", "┐", " ", "│", "│", " ", "┌", "─", "─", "┘", "│", " ", "┌", "─", "─", "─", "─", "┘" },
        { "│", "#", "#", "#", "#", "│", " ", "│", "┌", "─", "─", "┘", " ", "└", "┘", " ", "└", "─", "─", "┐", "│", " ", "│", "#", "#", "#", "#", "│" },
        { "│", "#", "#", "#", "#", "│", " ", "│", "│", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", "│", "│", " ", "│", "#", "#", "#", "#", "│" },
        { "│", "#", "#", "#", "#", "│", " ", "│", "│", " ", "┌", "─", "─", " ", " ", "─", "─", "┐", " ", "│", "│", " ", "│", "#", "#", "#", "#", "│" },
        { "└", "─", "─", "─", "─", "┘", " ", "└", "┘", " ", "│", "%", "%", "%", "%", "%", "%", "│", " ", "└", "┘", " ", "└", "─", "─", "─", "─", "┘" },
        { " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", "│", "%", "%", "%", "%", "%", "%", "│", " ", " ", " ", " ", " ", " ", " ", " ", " ", " " },
        { "┌", "─", "─", "─", "─", "┐", " ", "┌", "┐", " ", "│", "%", "%", "%", "%", "%", "%", "│", " ", "┌", "┐", " ", "┌", "─", "─", "─", "─", "┐" },
        { "│", "#", "#", "#", "#", "│", " ", "│", "│", " ", "└", "─", "─", "─", "─", "─", "─", "┘", " ", "│", "│", " ", "│", "#", "#", "#", "#", "│" },
        { "│", "#", "#", "#", "#", "│", " ", "│", "│", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", "│", "│", " ", "│", "#", "#", "#", "#", "│" },
        { "│", "#", "#", "#", "#", "│", " ", "│", "│", " ", "┌", "─", "─", "─", "─", "─", "─", "┐", " ", "│", "│", " ", "│", "#", "#", "#", "#", "│" },
        { "┌", "─", "─", "─", "─", "┘", " ", "└", "┘", " ", "└", "─", "─", "┐", "┌", "─", "─", "┘", " ", "└", "┘", " ", "└", "─", "─", "─", "─", "┐" },
        { "│", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", "│", "│", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", "│" },
        { "│", " ", "┌", "─", "─", "┐", " ", "┌", "─", "─", "─", "┐", " ", "│", "│", " ", "┌", "─", "─", "─", "┐", " ", "┌", "─", "─", "┐", " ", "│" },
        { "│", " ", "└", "─", "┐", "│", " ", "└", "─", "─", "─", "┘", " ", "└", "┘", " ", "└", "─", "─", "─", "┘", " ", "│", "┌", "─", "┘", " ", "│" },
        { "│", " ", " ", " ", "│", "│", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", "│", "│", " ", " ", " ", "│" },
        { "│", "─", "┐", " ", "│", "│", " ", "┌", "┐", " ", "┌", "─", "─", "─", "─", "─", "─", "┐", " ", "┌", "┐", " ", "│", "│", " ", "┌", "─", "│" },
        { "│", "─", "┘", " ", "└", "┘", " ", "│", "│", " ", "└", "─", "─", "┐", "┌", "─", "─", "┘", " ", "│", "│", " ", "└", "┘", " ", "└", "─", "│" },
        { "│", " ", " ", " ", " ", " ", " ", "│", "│", " ", " ", " ", " ", "│", "│", " ", " ", " ", " ", "│", "│", " ", " ", " ", " ", " ", " ", "│" },
        { "│", " ", "┌", "─", "─", "─", "─", "┘", "└", "─", "─", "┐", " ", "│", "│", " ", "┌", "─", "─", "┘", "└", "─", "─", "─", "─", "┐", " ", "│" },
        { "│", " ", "└", "─", "─", "─", "─", "─", "─", "─", "─", "┘", " ", "└", "┘", " ", "└", "─", "─", "─", "─", "─", "─", "─", "─", "┘", " ", "│" },
        { "│", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", "│" },
        { "└", "─", "─", "─", "─", "─", "─", "─", "─", "─", "─", "─", "─", "─", "─", "─", "─", "─", "─", "─", "─", "─", "─", "─", "─", "─", "─", "┘" },
        };

        public string this[int rows, int cols]
        {
            get
            {
                return this.matrix[rows, cols];
            }
        }

        public void DrawMaze()
        {
            for (int row = 0; row < this.matrix.GetLength(0); row++)
            {
                for (int col = 0; col < this.matrix.GetLength(1); col++)
                {
                    if (this.matrix[row, col] != "%")
                    {
                        Console.Write(this.matrix[row, col]);
                    }
                    else
                    {
                        Console.Write(" ");
                    }
                }

                Console.WriteLine();
            }
        }
     
        public bool IsThereTunnel(int objectCoordX, int objectCoordY)
        {
            bool isThereEmptyCell = new bool();
            if (this.matrix.GetLength(1) <= objectCoordX || this.matrix.GetLength(0) <= objectCoordY || objectCoordX < 0 || objectCoordY < 0)
            {
                isThereEmptyCell = false;
            }
            else if (this.matrix[objectCoordY, objectCoordX] == " ")
            {
                isThereEmptyCell = true;
            }

            return isThereEmptyCell;
        }

        public bool IsItPrison(int objectCoordX, int objectCoordY)
        {
            bool isThereEmptyCell = new bool();
            if (this.matrix.GetLength(1) <= objectCoordX || this.matrix.GetLength(0) <= objectCoordY || objectCoordX < 0 || objectCoordY < 0)
            {
                isThereEmptyCell = false;
            }
            else if (this.matrix[objectCoordY, objectCoordX] == "%")
            {
                isThereEmptyCell = true;
            }

            return isThereEmptyCell;
        }
    }
}
